package com.bobi.tfca.model.entity;

import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.bobi.tfca.model.vo.MessageVO;
import com.bobi.tfca.utils.DateTimeUtil;
import com.google.gson.Gson;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serial;
import java.io.Serializable;
import java.sql.Timestamp;

/**
 * 消息实体
 * @author 李文发
 * @date 2024/4/2
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel(value = "消息")
@TableName(value = "message")
public class MessageEntity implements Serializable {

    @Serial
    private static final long serialVersionUID = -8209928762281924979L;

    @TableId
    @ApiModelProperty(value = "消息id")
    // 消息id
    private Long messageId;
    @ApiModelProperty(value = "发送者id")
    // 发送者id
    private Integer senderId;
    @ApiModelProperty(value = "接受者id")
    // 接受者id
    private Integer receiverId;
    @ApiModelProperty(value = "消息内容")
    // 消息内容
    private String content;
    @ApiModelProperty(value = "消息内容类型（0：文本，1：图片，2：文件， 3： PING，4：LOGIN）")
    // 消息内容类型（0：文本，1：图片，2：文件, 3:PING，4：LOGIN）
    private Integer contentType;
    @ApiModelProperty(value = "消息属类（0：通知，1：信件，2：群聊）")
    // 消息属类（0：通知，1：信件，2：群聊）
    private Integer category;
    @ApiModelProperty(value = "消息状态（0：已发送，1：已送达，2：已读）")
    // 消息状态（0：已发送，1：已送达，2：已读）
    private Integer messageStatus;
    @ApiModelProperty(value = "发送时间")
    // 发送时间
    private Timestamp sendTime;
    // 消息是否可见
    @TableField(exist = false)
    private Boolean isTimeVisible;

    public static MessageEntity ofMessageVO(MessageVO messageVO) {
        MessageEntity entity = new MessageEntity();
        BeanUtil.copyProperties(messageVO, entity, "sendTime");
        String sendTime = messageVO.getSendTime();
        Timestamp timestamp = DateTimeUtil.stringConvertTimestamp(sendTime);
        entity.setSendTime(timestamp);
        return entity;
    }

}
